שאלה על decode
צריך לפתור על מחשב.
נתון:
main
ושתי פונקציות ממושות is_Decodable, decode.
is_Decodable מקבלת מחרוזת קקלט ומחזירה אמת אם המחרוזת היא מסוג
% ואז שתי מספרים אקסה דצימלים. אחרת מחזיר שקר.
decode מקבל מחרוזת ועבור % ושתי מספרים אקסדצמלים מחזיר את הערך האסקי.
לדוגמא %33 מחזיר 3
%25 מחזיר %
צריך לממש פונציה getUnescapedString שמקבלת קלט מחרוזת עם תווים וגודל.
צריך להחזיר את המחרוזת הנתונה כך שכל כל מה שמהצורה decode
מוחלף לערך האסקי שלו.
אם לאחר ההחלפה יש decode חדש - יש להחליף אותו גם עד שלא יישאר יותר decode.
דגשים:
התוכנית צריכה להתבצע בo(n)
עדיף אם אפשר לא להקצות זיכרון נוסף.
אם פותרים בצורה האופטמלית יש באג בmain הנתון.
לדוגמא:
aa%25%33%33bb
->
aa%33bb
->
aa3bb
תשובות
הוסף תשובה
|
לצפיה בתשובות
ספטמבר 2019
char* Decod::getUnescapedString(char* inputStr, i _len)
{
int k = 0;
unsigned char decRes = 0;
//char* outStr = new char[len]();
for (int i = 0; i < len -1; i++)
{
if (is_Decodable(&inputStr[i]) == false)
{
inputStr[k] = inputStr[i];
}
else
{
decRes = decode(&inputStr[i]);
inputStr[k] = decRes;
i = i + 2;
}
if (k > 1)
{
if (is_Decodable(&inputStr[k - 2]) == true)
{
decRes = decode(&inputStr[k - 2]);
k = k - 2;
inputStr[k] = decRes;
}
}
k++;
}
for (int i = k + 1; i < len - 1; i++)
{
inputStr[k] = 0;
}
*res_len = k + 1;
return inputStr;
מרץ 2021
void getUnescapedString(char* str)
{
int writeOffset = 0;
int origLen = strlen(str);
למצוא את הבעיה בקוד נתון (משחקים עם פוינטרים ושחרור זכרון).
להבין קטע קוד שכתוב כולו במקרו וגם לעשות על זה שינוי ולכתוב את זה במקרו.
לבסוף לכתוב תוכנית (בלפטופ) שעושה משחקים עם ביטים (bit manipulations) ואז לחשוב איך לייעל אותה (לחשב מראש את כל ההמרות ולאכסן אותם במערך).
טלפון מHR. קובעים ראיון. לא עברתי את הראיון הראשון אז לא יודע יותר מזה.
שאלות מתוך הראיון
url decoder:
פונקציה מקבלת מחרוזת url עם אותיות ומספרים. בכל פעם שהיא נתקלת לדוגמא %32, היא צריכה להפוך את הצירוף הזה לאות ASCII. המחרוזת עלולה להכיל כמה וכמה צירופים כאלה, והם יכולים להיות גם מוכלים אחד בשני.
דוגמאות:
ab%2fcd ---> ab/cd
ab%%32fcd--->ab%2fcd-->ab/cd
ab%2%66cd--->ab%2fcd--->ab/cd
ab%%32%66cd--->ab/cd
וכו'.
הפונקציות שממומשות הן פונקית main ששולחת מחרוזת לפונקציה, ורוצה לקבל את המחרוזת החדשה.
כמו כן אתה מקבל פונקציה שמקבלת מחרוזת ומחליטה האם היא בצורה של %xy כאשר x,y הם מספרים הקסדצימליים. כמו כן מקבלים פונקצית שמקבלת מחרוזת שבנויה בצורת של %xy ומחזירה את המקבילה של הביטוי בASCII.
המגבלות שנתנו לפיתרון השאלה: אפשר להשתמש במשתני עזר, אבל יש לפתור את השאלה ב"מעבר אחד על המחרוזת" ולסדר אותה תוך כדי. כלומר, אין הכוונה להשתמש במחרוזת חדשה שאליה כותבים את המחרוזת ה"מתוקנת"..
את הקוד צריך לכתוב לתוך התכנית ולקמפל ממש. כלומר, הפיתרון אינו תיאורטי או בכתב יד אלא ממש צריך לעבוד.
תשובות
הוסף תשובה
|
לצפיה בתשובות
נובמבר 2016
ריצה מהסוף להתחלה עם 2 פויטרים שאחד קורא ואחד כותב... בסוף המחרוזת הסופית נמצאת בסוף המחרוזת. לא הצלחתי להגיע לסוף דעתו של הבוחן.
יש לציין שרמת הדיוק צריכה להיות גבוהה, שכן הקוד נכתב במחשב וצריך להתקמפל ולעבוד.